/**
 * hzyaSearch 文本框输入内容回车查询数据 引用：jquery、easyui.datagrid、eaysui.dialog
 * 
 */
;
(function($) {
	$.fn.hzyaSearch = function(options) {
		options = $.extend({}, $.fn.hzyaSearch.defaults, options);
		this.each(function() {
			var input = $(this);
			if (options.paramName == null || options.paramName == "")
				options.paramName = $(input).attr("id") || $(input).attr("name");
			_bindKeydown(input, options);
		});
		// 给对象绑定方法
		$.extend(this, {
			// 执行查询
			search : function() {
				var input = $(this);
				_loadSearchData(input, options);
			}
		});
		return this;
	};

	$.fn.hzyaSearch.defaults = {
		openDialog : false,// 始终打开选择框，不管有没有数据
		debug : false, // 测试模式
		url : null, // 加载数据的url
		paramName : "", // 做为参数提交时的名称，默认为input的id或name
		single : true, // 单选[true/falas]
		width : 780, // dialog宽度
		height : 550, // dialog高度
		title : "search", // dialog标题
		columns : [], // 多条数据时，显示的表格配置，这里配置和datagrid配置语法一样
		// 回调方法，参数：单选时为一行数据对象，多选时是多行数据数组
		callback : null,
		buttons : []
	// 要增加的按钮
	};
	// 绑定事件
	function _bindKeydown(input, options) {
		$(input).keydown(function(e) {
			e = e || event || window.event;
			var keyCode = e.keyCode || e.which || e.charCode;
			if (keyCode != 13) {
				return;
			}
			_loadSearchData(input, options);
		});
	}
	;

	/*
	 * begin
	 * 加载数据----------------------------------------------------------------
	 */
	function _loadSearchData(input, options) {
		var url;
		// 这里增加判断 url是方法时，就执行方法，返回url，实现加载前参数重加载功能。
		if (typeof (options.url) == "function") {
			url = options.url();
			if (url == null || url == false)
				return;
		} else {
			url = options.url;
		}
		// 判断参数
		if (url.indexOf("?") == -1)
			url += "?";
		else
			url += "&";
		url = url + options.paramName + "=" + encodeURIComponent($(input).val());
		if (options.debug) {
			alert("准备执行查询数据，url:" + url);
		}
		var resultData = null;
		$.ajax({
			url : url,
			type : "GET",
			dataType : "JSON",
			cache : false,
			async : false,
			beforeSend : function(xhr) {
				$.messager.progress({
					title : "提示",
					text : "正在查询数据，请稍后...."
				});
			},
			complete : function(xhr, ts) {
				$.messager.progress("close");
			},
			success : function(result, textStatus, xhr) {
				resultData = result;
				// alert(result.length);
			},
			error : function(xhr, errorMsg, errorObj) {
				alert(errorMsg + "-" + errorObj);
			}
		});
		if (options.openDialog == true) {
			_showDialog(input, options, resultData);
			return;
		}
		if (resultData == null || resultData.length == 0 || (resultData.rows != null && resultData.rows.length == 0)) {
			$.messager.alert('提示', "查询结果为空", 'info');
			$(input).focus();
			return;
		}
		// 只有一条数据，就直接调用回调方法
		if (resultData.rows == null && resultData.length == 1) {
			options.callback(resultData[0]);
			return;
		}
		if (resultData.rows != null && resultData.rows.length == 1) {
			options.callback(resultData.rows[0]);
			return;
		}
		// 有多条数据就显示表格对话框
		_showDialog(input, options, resultData);
	}
	;
	/* end加载数据- */

	/*
	 * begin
	 * 显示选择对话框------------------------------------------------------------------
	 */
	function _showDialog(input, options, data) {
		var dialogId = "hayaSearch_dialogDiv_" + options.paramName;
		var gridId = "hayaSearch_datagrid_" + options.paramName;
		var _dialogDiv_ = document.getElementById(dialogId);
		if (!_dialogDiv_) {
			// 创建dialog
			_createSearchDialog(dialogId, gridId, options);
			// 创建dataGrid
			_createSearchDataGrid(dialogId, gridId, options);
		}
		// 打开dialog
		$("#" + dialogId).dialog("open");
		// 绑定数据
		$("#" + gridId).datagrid("loadData", data);
	}
	;
	/* end显示选择对话框- */

	/* begin创建对话框- */
	function _createSearchDialog(dialogId, gridId, options) {
		if (options.debug) {
			alert("begin创建对话框，dialogId:" + dialogId);
		}
		// 创建容器
		var dialogDiv = document.createElement("div");
		dialogDiv.setAttribute("id", dialogId);
		document.body.appendChild(dialogDiv);
		$("<table id='" + gridId + "' ></table>").appendTo(dialogDiv);
		// alert("按钮集合并前："+JSON.stringify(options.buttons));
		// 处理按钮
		if (options.buttons == null)
			options.buttons = new Array();
		var tmpButtons = new Array();
		for ( var i = 0; i < options.buttons.length; i++) {
			if (options.buttons[i].text == "确定" || options.buttons[i].text == "取消") {
				$(options.buttons[i]).remove();
			} else {
				tmpButtons.push(options.buttons[i]);
			}
		}
		options.buttons = tmpButtons;
		options.buttons.push({
			text : "确定",
			iconCls : "icon-ok",
			handler : function() {
				var returnValues;
				if (options.single == true)
					returnValues = $('#' + gridId).datagrid("getSelected");
				else
					returnValues = $('#' + gridId).datagrid("getSelections");
				if (!returnValues || returnValues.length == 0) {
					alert("请选择数据。");
					return;
				}
				$("#" + dialogId).dialog("close");
				// 回调方法
				options.callback(returnValues);
			}
		});
		options.buttons.push({
			text : "取消",
			iconCls : "icon-cancel",
			handler : function() {
				$("#" + dialogId).dialog("close");
			}
		});
		// alert("按钮集合并后："+JSON.stringify(options.buttons));
		// 定义dialog对象
		$("#" + dialogId).dialog({
			iconCls : 'icon-search',
			title : options.title,
			width : options.width,
			height : options.height,
			closed : true,
			cache : false,
			modal : true,
			buttons : options.buttons
		});
		if (options.debug) {
			alert("end创建对话框。");
		}
	}
	;

	/* begin创建表格- */
	function _createSearchDataGrid(dialogId, gridId, options) {
		if (options.debug) {
			alert("begin创建表格，gridId:" + gridId);
		}
		$('#' + gridId).datagrid({
			singleSelect : options.single,
			fit : true,
			border : false,
			onDblClickRow : function(rowIndex, rowData) {
				$("#" + dialogId).dialog("close");
				if (options.single == true) {
					options.callback(rowData);
				} else {
					options.callback($('#' + gridId).datagrid("getSelections"));
				}
			},
			columns : options.columns
		});
		if (options.debug) {
			alert("end创建表格。");
		}
	}
	;
})(jQuery);
